An operating system usually segregates virtual memory into a kernel space and a user space. The kernel space may be reserved for running privileged kernel, kernel extensions and most device drivers. The user space is the memory area where all user mode applications and some device drivers execute. A file system may also be implemented in the user space. Unix-based file systems typically associate each file and directory with an inode (index node). An inode is a data structure that stores information about a file or directory such as file ownership, access mode (read, write, execute permissions), and file type.
Communications between a user mode application and the file system are typically performed via the kernel. When an application issues a command pertaining to a file or directory stored in the file system (e.g., open, create, delete, etc.), the application usually provides a path to the file or directory, and the kernel's path resolving component (“path resolver”) converts the path into an inode address.
Some applications use symbolic links (“symlinks”) that point to other files or directories. A symlink is a special type of file that contains a reference to another (“target”) file or directory in the form of an absolute or relative path. The kernel's path resolver interprets a text string in the symlink to determine a path to the target file or directory, converts it into an inode address of the target file or directory, and provides the inode to the file system.
The use of the kernel as an intermediary between the application and the file system slows the performance of the application, especially when the application is asking for data or is writing data to a file.